package io.gitee.hchaojie.day07;

import org.junit.Test;

import java.io.File;
import java.io.IOException;

public class TestFile {
    @Test
    public void test() {
        // [复制、剪切、] 创建目录、创建新文件、判断文件是否存在、
        // 读文件的信息（不是内容）：文件大小、时间、文件路径
    }

    // 创建文件、目录
    @Test
    public void testCreate() throws IOException {
        File file = new File("D:\\test.md");    // 内存里面创建了一个文件对象，

        // 需要处理异常（I/O）, 1: 耗时  2：容易出问题

        boolean created = file.createNewFile();
        System.out.println(created);


        // 目录和文件都是用File对象封装
        File folder = new File("D:\\abc");
        boolean success = folder.mkdir();   // make directory
        System.out.println(success);

        File longFoloder = new File("D:\\abc\\e\\f");
        longFoloder.mkdirs();        // 创建多级目录

        System.out.println(file.exists());
        System.out.println(folder.exists());
        System.out.println(longFoloder.exists());
        System.out.println(new File("D:\\def").exists());
    }

    @Test
    public void testRelativePath() {
        // 相等当前项目的根目录
        File f = new File("src\\io\\gitee\\hchaojie\\day07\\TestFile.java");

        System.out.println(f.exists());

        // \ 转义字符
        File f2 = new File("data\\scores2.csv");
    }

    // 读文件的信息（不是内容）：文件大小、时间、文件路径
    @Test
    public void testFileIterator() {
        File folder = new File("src\\io\\gitee\\hchaojie\\day06");

        File[] files = folder.listFiles();
        for (File file : files) {
            // file.getPath()           相对路径
            // file.getAbsolutePath()   绝对路径
            // file.getName()           文件名
            System.out.println(file.getAbsolutePath() + " # "
                    + file.getName() + " # " + file.length() + " # " + file.lastModified());

            if (file.isDirectory()) {
                System.out.println("这是一个目录。。。");
            }
        }
    }

    // 递归的遍历一个目录
    @Test
    public void testFileIterator2() {
        // String dir = "src\\io\\gitee\\hchaojie";
        String dir = ".\\";

        long start = System.currentTimeMillis();
        listDirectory(new File(dir));

        long end = System.currentTimeMillis();

        System.out.println("耗时： " + (end - start));
    }

    // 传入一个目录，列出目录下面的子目录和文件
    public void listDirectory(File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsolutePath());
            if (f.isDirectory()) {      // 是目录
                listDirectory(f);
            }
        }
    }
}
